<--- %%NOBANNER%% --> mn1_pr.sas
 BackForward

/*------------------<--- Start of Description -->--------------------\
| Power for one mean;                                                |
|--------------------<--- End of Description -->---------------------|
|--------------------------------------------------------------------|
|--------------<--- Start of Files or Arguments Needed -->-----------|
| Arguments:                                                         |
|   - Required:                                                      |
|     n1     = sample size                                           |
|     std    = standard deviation                                    |
|     y1     = true mean under null hypothesis                       |
|     min_y2 = smallest possible alternative hypothesis mean         |
|                                                                    |
|   - Optional:                                                      |
|     max_y2 = largest possible alternative hypothesis mean          |
|     inc_y2 = increment value for range of y2                       |
|     alpha  = type 1 error, e.g. .01 or .05, default=.05            |
|     sides  = 1 or 2 for 1 or 2 sided test, default=2               |
|     plot   = 'P' for line printer plot of power vs y2              |
|              'G' for SAS/GRAPH plot of power vs y2                 |
|     unit   = units for mean, e.g. mg, lbs., cm, etc.               |
| Output:  Power for null hypothesis mean of y1 vs alternative       |
|            hypothesis means ranging from min_y2 to max_y2          |
|---------------<--- End of Files or Arguments Needed -->------------|
|--------------------------------------------------------------------|
|----------------<--- Start of Example and Usage -->-----------------|
| Example: %mn1_pr(alpha=.05,sides=2,n1=102,std=1,y1=0, min_y2=0.2); |
| Usage:   %mn1_pr(ALPHA=.05,SIDES=2,N1=.,Y1=.,MIN_Y2=.,             |
|             MAX_Y2=.,INC_Y2=.,STD=.,PLOT= , UNIT=);                |
| Reference: Bergstralh, EJ.  SAS macros for sample size and power   |
|            calculations.  Proceedings of the 9th annual SAS Users  |
|            Group International Conference.                         |
|            Equation #4.                                            |
\-------------------<--- End of Example and Usage -->---------------*/
%MACRO mn1_pr(ALPHA=.05,SIDES=2,N1=.,Y1=.,MIN_Y2=.,
              MAX_Y2=.,INC_Y2=.,STD=.,PLOT= , UNIT=);
/*--------------------------------------------\
| Author:   Michael Riggs and Eric Bergstralh;|
| Created:  November 16, 1992;                |
| Modified: January 9, 1998;                  |
| Purpose:  Power for One means;              |
\--------------------------------------------*/
 OPTIONS MISSING=' ' NOCENTER;
   %LET PLOT=%UPCASE(&PLOT);
 DATA T1;
      ALPHA=&ALPHA;
      SIDES=&SIDES;
      Y1=&Y1;
      MIN_Y2=&MIN_Y2;
      MAX_Y2=&MAX_Y2;
      INC_Y2=&INC_Y2;
      N1=&N1;
      STD=&STD;

    ZALPHA=(PROBIT(1-ALPHA))*(SIDES=1) + (PROBIT(1-ALPHA/2))*(SIDES=2);
    IF MAX_Y2=. THEN DO;
      MAX_Y2=MIN_Y2+1; INC_Y2=MIN_Y2+2;  *NEED 1 EXEC OF DO;
    END;
    TY1=Y1;
    TSTD=STD;
    TN1=N1;
    df=tn1-1;
    tn1=int( tn1*(df+1)/(df+3) );   *reduce N for t-test 1/9/98;
     DO Y2=MIN_Y2 TO MAX_Y2 BY INC_Y2;
       ZBETA=(SQRT(TN1)*ABS(Y2-TY1)-ZALPHA*TSTD)/TSTD;
       POWER=PROBNORM(ZBETA);
       OUTPUT;
     END;

 LABEL Y1="Null hyp.*Mean* (&unit)"
       Y2="Alt. hyp.*Mean* (&unit)";
       SIDES='1 VS. 2*TAILED*TEST';
FOOTNOTE1 '   ';

 PROC PRINT SPLIT='*';
  ID Y1; var Y2 POWER;

 TITLE3
   "POWER ESTIMATES FOR COMPARING ONE MEAN TO A CONSTANT";
 TITLE4
 "Alpha=&alpha, Sides=&sides, STD=&std, N1=&n1, Null hypothesis: mean=&y1";

%IF "&MAX_Y2" NE "" %THEN %DO;
    %IF &PLOT= P  %THEN %DO;
      PROC PLOT NOLEGEND;
      PLOT POWER*Y2/ VAXIS=0 TO 1.0 BY .10  ;
      LABEL Y2="Alt. hyp. mean(&unit)";
    %END;
    %ELSE %IF &PLOT= G  %THEN %DO;
          PROC GPLOT ;
      PLOT POWER*Y2;
      SYMBOL1  Font=  V=none I=j l=1;
      LABEL Y2="Alt. hyp. mean(&unit)";
      run;
    %END;
    RUN;
%END;
%MEND MN1_PR;